package nocturnos.domain;

import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

//import nocturnos.utiles.comparadores.RegalosPorPuntosComparator;


public class Puntos {

	private static final Double APS=0.5; //Aalor Permitido en aire
	private static final Double laMitadDeAPS=(0.5*APS); //tasa permitida en sangre
	private static final Double umbralCondicionConductor = (APS*1.25); 
	private Integer idGrupo;
	private List<Integer> puntos;
	private Integer totalPuntos;
	private Regalos regaloGanado;
	
	public Puntos(){

		puntos = new LinkedList<Integer>();
		totalPuntos=0;
		regaloGanado= new Regalos(0); 
	}
	
	public Puntos(Integer idGrupo){
		this.idGrupo=idGrupo;
		List<Integer> puntos;
		totalPuntos=0;
	}
	
	
	
	public Integer getIdGrupo() {
		return idGrupo;
	}
	public void setIdGrupo(Integer idGrupo) {
		this.idGrupo = idGrupo;
	}

	
	public List<Integer> getPuntos() {
		return puntos;
	}
	public void setPuntos(List<Integer> puntos) {
		this.puntos = puntos;
	}

	public void AnadePuntos (Double tasa){
		
		Integer valorCalculado=0;
		
		
		if(tasa<0)
			Math.abs(tasa);
	
		
		if (tasa>=laMitadDeAPS){
			valorCalculado=2;	
		}else if (tasa<APS){
			valorCalculado=5;
			
		}
		
		puntos.add(valorCalculado);
		this.CalculaPuntos();
	}

	public void borraPuntos(){
		puntos.clear();
		
	}
	
	
	
	
	public Integer getTotalPuntos() {
		return totalPuntos;
	}
	public void setTotalPuntos(Integer totalPuntos) {
		this.totalPuntos = totalPuntos;
	}
	

	
	public void CalculaPuntos(){
		
		
		Iterator<Integer> it1 = puntos.iterator();
		Integer suma=0;
		while(it1.hasNext()){
			Integer actual = it1.next();
			suma=suma+actual;
			
		}
		setTotalPuntos(suma);
	}
	
	public void CalculaPremio (StockRegalos regalosPosibles){
		CalculaPuntos();
		Regalos regalo = new Regalos(0);
				
		List<Regalos> listaRegalos=regalosPosibles.getListaDeRegalos();
		
		Collections.sort(listaRegalos);
				
		boolean encontrado = false;
		
		Iterator<Regalos> it2 = listaRegalos.iterator();
		
		while(it2.hasNext() && encontrado==false){
			Regalos regaloActual = it2.next();
			if(getTotalPuntos()>= regaloActual.getPuntosRegalo()){
				regalo=regaloActual;
				encontrado=true;
				
			}								
			
		}
		
		
		setRegaloGanado(regalo);
		
		
	}
	
	public void anulaConductor(Persona p, Double tasa){
		
		if(tasa>umbralCondicionConductor){
			p.setConductor(false);
			setTotalPuntos(0);
		}
		}

	
	public String toString(){
		
		
		return getPuntos().toString();
	}
	
	public String toString (Integer valor){
		return ""+getPuntos()+" -> "+getTotalPuntos();
		
	}

	public Regalos getRegaloGanado() {
		return regaloGanado;
	}

	public void setRegaloGanado(Regalos regaloGanado) {
		this.regaloGanado = regaloGanado;
	}
}
